const fs = require('fs');

function addMapping(router, mapping) {
    for (var url in mapping) {
        if (url.startsWith('GET ')) {
            var path = url.substring(4);
            router.get(path, mapping[url]);
            console.log(`register URL mapping: GET ${path}`);
        } else if (url.startsWith('POST ')) {
            var path = url.substring(5);
            router.post(path, mapping[url]);
            console.log(`register URL mapping: POST ${path}`);
        } else if (url.startsWith('PUT ')) {
            var path = url.substring(4);
            router.put(path, mapping[url]);
            console.log(`register URL mapping: PUT ${path}`);
        } else if (url.startsWith('DELETE ')) {
            var path = url.substring(7);
            router.del(path, mapping[url]);
            console.log(`register URL mapping: DELETE ${path}`);
        }
        else {
            console.log(`invalid URL: ${url}`);
        }
    }
}

function addController(router, dir) {
    // var files = fs.readdirSync(__dirname);
    // var js_files = files.filter((f) => {
    //     return f.endsWith('.js');
    // });
    let js_files = fs.readdirSync(dir).filter((f) => {
        return f.endsWith(".js");
    });

    for (var f of js_files) {
        console.log(`process controller: ${f}...`);
        let mapping = require(dir + '/' + f);
        addMapping(router, mapping);
    }
}

// function addUploadFile(router) {
//     //文件上传  
//     const multer = require('koa-multer');
//     //配置  
//     var storage = multer.diskStorage({
//         //文件保存路径  
//         destination: function (req, file, cb) {
//             cb(null, '../upload/img/')
//         },
//         filename: function (req, file, cb) {
//             var fileFormat = (file.originalname).split(".");
//             cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]);
//         }
//     })
//     var upload = multer({ storage: storage });
//     //upload.single('file')这里面的file是上传空间的name<input type="file" name="file"/>    
//     router.post('/uploadFile', upload.single('file'), async (ctx, next) => {
//         ctx.response.body = "<h1>上传成功！</h1>";
//         /*ctx.body = {   
//                 filename: ctx.req.file.filename//返回文件名   
//         } */
//         ctx.redirect('/');
//     })
//     console.log(`register URL mapping: POST /uploadFile`);
// }  

module.exports = function (dir) {
    let controllers_dir = dir || __dirname,  // 如果不传参数，扫描目录默认为__dirname
        router = require('koa-router')();
    addController(router, controllers_dir);
    // addUploadFile(router);
    return router.routes();
};
